﻿namespace ConsoleApp7
{
    //6、协变和逆变  委托、接口的协变和逆变
    /*协变（covariance）和逆变（contravariance）是与委托和接口相关的重要概念，
     * 用于描述泛型类型参数在继承关系中的行为。
     * 这些概念允许你在不破坏类型安全性的情况下，更灵活地使用泛型类型。
     * */





    internal class Program 
    {
        //1 协变用法
        delegate IEnumerable<string> CovariantDelegate();

        static IEnumerable<string> GetStrings()
        {
            return new List<string> { "Hello", "World" };
        }

        //2 逆变用法
       




        static void Main(string[] args)
        {
            //1 协变用法 
            CovariantDelegate covariantDelegate = GetStrings;
            // 协变允许返回派生类型的IEnumerable<string>分配给IEnumerable<object>
            IEnumerable<object> objects = covariantDelegate(); 

            foreach (var obj in objects)
            {
                Console.WriteLine(obj);
            }

            //2 逆变用法
            

        }



    }
}